#%%
# torchvision object detection finetuning tutorial
# 先设置好路径
from pathlib import Path
PATH = Path(r'C:\files\git_repository\pytorch-learning\pytorch学习\3image and video')
print(PATH)
#%%
# 基本介绍
# 这个教程我们会微调一个预训练模型 Mask R-CNN
# 用在在这个数据集上
# Penn-Fudan Database for Pedestrian Detection and Segmentation
# 宾夕法尼亚-复旦行人检测和分割数据库
# 有170张图片，345个行人，我们将用来示例如何用torchvision的
# 新特性来在自定义的数据集上训练实例分割模型
#%%
# 定义数据集
# 自定义数据集需要继承自Dataset并且要实现__len__和__getitem__方法
# 我们只需要注意，__getitem__需要return如下数据：
# image: PIL格式 size(H,W)
# target: 是一个字典 
# boxes (FloatTensor[N, 4]):[x0,y0,x1,y1] x(0-W) y[0-H] 就是需要检测的框
# labels (Int64Tensor[N]):每个框框的标签，0代表背景
# image_id (Int64Tensor[1]):image的标识，每个都不同，用于评估阶段
# area (Tensor[N]):每个边界框的面积，
# 用在使用COCO metric评估的过程，来分离小框、中框、大框的精确得分
# iscrowd (UInt8Tensor[N]): 是否是人群，如果是True那么在评估的时候会被忽略
# (可选)masks (UInt8Tensor[N, H, W]): 每个目标的分割mask
# (可选)keypoints (FloatTensor[N, K, 3]):
# 每个对象都包含k个关键点，visibility代表能见度，为0代表不可见，
# For each one of the N objects, it contains the K keypoints in [x, y, visibility] 
# format, defining the object. visibility=0 means that the keypoint is not visible. 
# 对于数据增强，翻转关键点取决于数据表示，对于你新的关键点表示
# 可以在references/detection/transforms.py下进行调整
# Note that for data augmentation, 
# the notion of flipping a keypoint is dependent on the data representation, 
# and you should probably adapt references/detection/transforms.py 
# for your new keypoint representation
#%%
# 如果返回上面的方法，那么我们可以训练和评估中都有用，
# 在评估中我们用pycocotools下的脚本
